/*
 * DBTools类，该类为工具类，所包含方法均为public static方法，不包含field，
 *
 * FIELDS:
 *
 * MEMBER FUNCTIONS:
 *
 * STATIC FUNCTIONS:
 *
 *      static QString fitDataBaseName(QDateTime givenDateTime);  从当前时间获取对应BCMS_COL数据库的名称字符串
 *
 *      static QMap<QDateTime, double> getUnderlineTagTimeSeris(QSqlDatabase dbConnection, QDateTime startTime,
 *                                                          QDateTime endTime, QString tagName, QString tableName, QString topCondition,
 *                                                          QString additionalCondition);  获取指定点和指定条件的时间序列数据
 *
 *      static int getMinSize(int a, int b);  一个纯内部使用函数，目的是从几个时间段获取的时间序列数据中按照最小的来截取
 *
 *      static double calculateDTW(QList<QMap<QDateTime, double>> originMatrix); 计算DTW的外壳函数，负责拆解QList<QMap>
 *      static double DTW(QMap<QDateTime, double> prevMap, QMap<QDateTime, double> thisMap);DTW算法的核心函数
 *
 *
*/

#ifndef DBTOOLS_H
#define DBTOOLS_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDateTime>

class DBTools : public QObject
{
    Q_OBJECT
public:
    explicit DBTools(QObject *parent = nullptr);

    /*
     * 根据BCMS每月根据月份产生新的数据库名称，定义该函数从给定时间生成数据库名称字符串
    */
    static QString fitDataBaseName(QDateTime givenDateTime);

    /*
     * 这个函数用于查询数据里的时间序列 static QMap<QDateTime, double>
    */
    static QMap<QDateTime, double> getUnderlineTagTimeSeris(QSqlDatabase dbConnection, QDateTime startTime,
                                                            QDateTime endTime, QString tagName, QString tableName, QString topCondition,
                                                            QString additionalCondition);

    static int getMinSize(int a, int b);

    /*
     * 这个函数接收原始某个点的时间序列，但是是数组，而不是Map，而不是数据，矩阵的结构是：
     * QList<QMap<QDateTime, double>>
    */
    static double calculateDTW(QList<QList<double>> originMatrix);

    static double DTW(QList<double> prevList, QList<double> thisList);

signals:

};

#endif // DBTOOLS_H
